<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function maxSlidingWindow(nums,k){
            if (nums.length===1) return nums
            var result=[]
            var deque=new Array(k).fill(null)
            var l=0
            var r=0
            for (let i=0;i<k-1;i++){
                while(r>l && nums[deque[r-1]]<nums[i]){
                    r--
                }
                deque[r++]=i
            }
            for (let i=k-1;i<nums.length;i++){
                while(r>l && nums[deque[r-1]]<nums[i]){
                    r--
                }
                deque[r++] = i
                if(deque[l]<i-k+1) l++
                result.push(nums[deque[l]])
            }
            console.log(result)
        }
        maxSlidingWindow([1,3,1,2,0,5], 3)























        // function maxSlidingWindow(nums, k) {
        //     let result = [];
        //     let deque = [];
        //     for (let i = 0; i < nums.length; i++) {
        //         // 移除队列中所有小于当前元素的元素
        //         while (deque.length > 0 && nums[deque[deque.length - 1]] < nums[i]) {
        //             deque.pop();
        //         }
        //         // 将当前元素的索引添加到队列中
        //         deque.push(i);
        //         // 如果队列的头部元素已经不在滑动窗口中，则移除它
        //         if (deque[0] <= i - k) {
        //             deque.shift();
        //         }
        //         // 如果滑动窗口已经形成，则将队列的头部元素添加到结果中
        //         if (i >= k - 1) {
        //             result.push(nums[deque[0]]);
        //         }
        //     }

        //     return result;
        // }
        // var maxSlidingWindow = function (nums, k) {
        //     class MonoQueue {
        //         queue;
        //         constructor() {
        //             this.queue = [];
        //         }
        //         enqueue(value) {
        //             let back = this.queue[this.queue.length - 1];
        //             while (back !== undefined && back < value) {
        //                 this.queue.pop();
        //                 back = this.queue[this.queue.length - 1];
        //             }
        //             this.queue.push(value);
        //         }
        //         dequeue(value) {
        //             let front = this.front();
        //             if (front === value) {
        //                 this.queue.shift();
        //             }
        //         }
        //         front() {
        //             return this.queue[0];
        //         }
        //     }
        //     let helperQueue = new MonoQueue();
        //     let i = 0, j = 0;
        //     let resArr = [];
        //     while (j < k) {
        //         helperQueue.enqueue(nums[j++]);
        //     }
        //     resArr.push(helperQueue.front());
        //     while (j < nums.length) {
        //         helperQueue.enqueue(nums[j]);
        //         helperQueue.dequeue(nums[i]);
        //         resArr.push(helperQueue.front());
        //         i++, j++;
        //     }
        //     return resArr;
        // };
        // console.log(maxSlidingWindow([1, 3, -1, -3, 5, 3, 6, 7], 3))
        // console.log(maxSlidingWindow([1, 3, -1, -3, 5, 3, 6, 7], 3))
    </script>
</body>

</html>